package com.template.utils;

import com.template.properties.JwtProperties;
import io.jsonwebtoken.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Map;

@Component
//@AllArgsConstructor
public class JwtUtils {

    @Autowired
    private JwtProperties jwtProperties;



//    生成jwt令牌
    public String generateJwt(Map<String, Object> claims){
        System.out.println("签名"+jwtProperties.getSignKey());
        String jwt= Jwts.builder()
                .addClaims(claims)
                .signWith(SignatureAlgorithm.HS256,jwtProperties.getSignKey())
                .setExpiration(new Date(System.currentTimeMillis()+jwtProperties.getExpire()))
                .compact();
        return jwt;
    }

//    解析jwt令牌
    public static Claims parseJWT(String jwt){
//        JwtProperties a=new JwtProperties();
        Claims claims=Jwts.parser()
                .setSigningKey("MuErZhi")
                .parseClaimsJws(jwt)
                .getBody();
        return claims;
    }

//判断jwt是否过期
    public static boolean isJwtExpired(String jwt, String secretKey) {
        try {

            // 解析 JWT
            Claims claims = Jwts.parser()
                    .setSigningKey(secretKey) // 使用相同的密钥来验证签名
                    .parseClaimsJws(jwt)
                    .getBody();

            // 获取过期时间
            Date expiration = claims.getExpiration();

            // 检查当前时间是否超过了 JWT 的过期时间
            return expiration.before(new Date());
        } catch (ExpiredJwtException e) {
            // 如果JWT过期，则认为 JWT 无效
            return true;
        } catch (SignatureException e) {
            // 如果签名无效，则认为 JWT 无效
            return true;
        }
    }

}


